<!doctype html>
<html>

<head>
    <title>Time Scale Point Data</title>
    <script src="../node_modules/moment/min/moment.min.js"></script>
    <script src="../Chart.js"></script>
    <script src="../node_modules/jquery/dist/jquery.min.js"></script>
    <style>
        canvas {
            -webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, .5);
        }
    </style>
</head>

<body>
    <div style="width:100%;">
        <canvas id="canvas" style="width:100%;height:100%"></canvas>
    </div>
    <br>
    <br>
    <button id="randomizeData">Randomize Data</button>
    <button id="addData">Add Data</button>
    <button id="removeData">Remove Data</button>
    <div>
        <h3>Legend</h3>
        <div id="legendContainer">
        </div>
    </div>
    <script>
        var randomScalingFactor = function() {
            return Math.round(Math.random() * 100 * (Math.random() > 0.5 ? -1 : 1));
        };
        var randomColorFactor = function() {
            return Math.round(Math.random() * 255);
        };
        var randomColor = function(opacity) {
            return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')';
        };
        var newDate = function(days) {
            var date = new Date();
            return date.setDate(date.getDate() + days);
        };
        var newTimestamp = function(days) {
            return Date.now() - days * 100000;
        };

        var config = {
            type: 'line',
            data: {
                datasets: [{
                    label: "Dataset with point data",
                    data: [{
                        x: "12/31/2014 06:00",
                        y: randomScalingFactor()
                    }, {
                        x: "01/04/2015 13:00",
                        y: randomScalingFactor()
                    }, {
                        x: "01/07/2015 01:15",
                        y: randomScalingFactor()
                    }, {
                        x: "01/15/2015 01:15",
                        y: randomScalingFactor()
                    }],
                    fill: false
                }]
            },
            options: {
                responsive: true,
                scales: {
                    xAxes: [{
                        type: "time",
                        display: true,
                        time: {
                            format: 'MM/DD/YYYY HH:mm',
                            // round: 'day'
                        },
                        scaleLabel: {
                            show: true,
                            labelString: 'Date'
                        }
                    }, ],
                    yAxes: [{
                        display: true,
                        scaleLabel: {
                            show: true,
                            labelString: 'value'
                        }
                    }]
                },
                elements: {
                    line: {
                        tension: 0.3
                    }
                },
            }
        };

        $.each(config.data.datasets, function(i, dataset) {
            dataset.borderColor = randomColor(0.4);
            dataset.backgroundColor = randomColor(0.5);
            dataset.pointBorderColor = randomColor(0.7);
            dataset.pointBackgroundColor = randomColor(0.5);
            dataset.pointBorderWidth = 1;
        });

        console.log(config.data);

        window.onload = function() {
            var ctx = document.getElementById("canvas").getContext("2d");
            window.myLine = new Chart(ctx, config);

            updateLegend();
        };

        function updateLegend() {
            $legendContainer = $('#legendContainer');
            $legendContainer.empty();
            $legendContainer.append(window.myLine.generateLegend());
        }

        $('#randomizeData').click(function() {
            $.each(config.data.datasets, function(i, dataset) {
                dataset.data = dataset.data.map(function() {
                    return randomScalingFactor();
                });
            });

            window.myLine.update();
            updateLegend();
        });

        $('#addData').click(function() {
            if (config.data.datasets.length > 0) {
                var newTime = myLine.scales['x-axis-0'].labelMoments[0][myLine.scales['x-axis-0'].labelMoments[0].length - 1]
                    .clone()
                    .add(1, 'day')
                    .format('MM/DD/YYYY HH:mm');

                for (var index = 0; index < config.data.datasets.length; ++index) {
                    config.data.datasets[index].data.push({
                        x: newTime,
                        y: randomScalingFactor()
                    });
                }

                window.myLine.update();
                updateLegend();
            }
        });

        $('#removeData').click(function() {
            config.data.datasets.forEach(function(dataset, datasetIndex) {
                dataset.data.pop();
            });

            window.myLine.update();
            updateLegend();
        });
    </script>
</body>

</html>
